/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Progra1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;

public class Caso4BD {

    private Connection conexion;
    private long mTiempoEjecucion;

    public Caso4BD() {
        conexion = null;
        mTiempoEjecucion=0;

    }

    /*
     * Metodo encargado de establecer la conexion por medio de la clase ConexionBD
     */
    public void conectarBD() {
        conexion = ConexionBD.getConnection();
    }

    public ArrayList<Caso4Poliza> Caso4ConsultaPorCliente(int cedula, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {
            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC, TablaVehiculos as TV, TablaSeguros as TS where TC.Cedula=TS.Cedula and TV.Placa=TS.Placa and TS.Cedula=?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural  join TablaVehiculos as TV natural  join TablaSeguros as TS where TS.Cedula=?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural left join TablaVehiculos as TV natural left join TablaSeguros as TS where TS.Cedula=?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural right join TablaVehiculos as TV natural right join TablaSeguros as TS where TS.Cedula=?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, cedula);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public ArrayList<Caso4Poliza> Caso4ConsultaPorMonto(int monto, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {

            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC, TablaVehiculos as TV, TablaSeguros as TS where TC.Cedula=TS.Cedula and TV.Placa=TS.Placa and TS.MontoMensual>?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural  join TablaVehiculos as TV natural  join TablaSeguros as TS where TS.MontoMensual>?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural left join TablaVehiculos as TV natural left join TablaSeguros as TS where TS.MontoMensual>?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural right join TablaVehiculos as TV natural right join TablaSeguros as TS where TS.MontoMensual>?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, monto);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public ArrayList<Caso4Poliza> Caso4ConsultaPorValor(int valor, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {
            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico,"
                        + " TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC, "
                        + "TablaVehiculos as TV, TablaSeguros as TS where TC.Cedula=TS.Cedula and "
                        + "TV.Placa=TS.Placa and TV.ValorFiscal>?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC "
                        + "natural  join TablaVehiculos as TV natural  join TablaSeguros as TS where "
                        + "TV.ValorFiscal>?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from  TablaSeguros as TS natural "
                        + "left join TablaVehiculos as TV natural left join  TablaClientes as TC  where"
                        + " TV.ValorFiscal>?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes as TC natural"
                        + " right join TablaVehiculos as TV natural right join TablaSeguros as TS where "
                        + "TV.ValorFiscal>?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, valor);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public long getDuracion() {
        return this.mTiempoEjecucion;
    }
}
